home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Developer Toolbox 6.1
/
SGI Developer Toolbox 6.1 - Disc 4.iso
/
public
/
SciAn
/
src
/
ScianJerryFiles.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-08-01
|
3KB
|
160 lines
/*ScianJerryFiles.c
Jerry Clarke
*/
#include "Scian.h"
#ifdef JERRYFILES
#include "ScianTypes.h"
#include "ScianArrays.h"
#include "ScianIcons.h"
#include "ScianWindows.h"
#include "ScianObjWindows.h"
#include "ScianVisWindows.h"
#include "ScianVisObjects.h"
#include "ScianControls.h"
#include "ScianColors.h"
#include "ScianDialogs.h"
#include "ScianFiles.h"
#include "ScianFileSystem.h"
#include "ScianLists.h"
#include "ScianPictures.h"
#include "ScianErrors.h"
#include "ScianTimers.h"
#include "ScianDatasets.h"
#include "ScianFilters.h"
#include "ScianTextBoxes.h"
#include "ScianTitleBoxes.h"
#include "ScianButtons.h"
#include "ScianSliders.h"
#include "ScianScripts.h"
#include "ScianIDs.h"
#include "ScianStyle.h"
#include "ScianMethods.h"
#include "ScianObjFunctions.h"
#include "ScianHwuFiles.h"
#include "ScianSciences.h"
#include "ScianVisObjects.h"
#include "ScianVisSticks.h"
/*Stop mkmk reading this file*/
/*-mkmk
*/
#include "bop.h"
#define POLYS_PER_BITE 1000
ObjPtr ReadBopFile(name)
char *name;
{
int have_geom = 0 , have_scalars = 0;
long polys_left = 0, total_polys = 0;
long n_polys, poly_cntr = 0, vert_cntr = 0;
long i, j, n, index = 0;
long poly_vert_index[BOP_MAX_VERTS];
float xyz_bounds[6];
FILE *fp;
Bop_Ptr *bp;
Bop_Polygon *orig_bpoly, *bpoly;
Bop_Vert *bvert;
/* Scian */
ObjPtr geometry, verticies, scalars;
ObjPtr dataform;
if((bp = bop_open(name)) == NULL){
Error("ReadBopFile", OPENFILEERROR, name);
return NULLOBJ;
}
if(bp->info.type & BOP_GEOM) have_geom = 1;
if(bp->info.type & BOP_SCALAR) have_scalars = 1;
fprintf(stderr, "\nBOP File %s\n", name);
fprintf(stderr, "%d Polygons %d Verticies\n",
bp->info.npoly, bp->info.nvert);
if((bp->info.npoly <= 0) || (bp->info.nvert <= 0)){
fprintf(stderr, "No Data in BOP File %s\n", name);
bop_close(bp);
return NULLOBJ;
}
xyz_bounds[0] = bp->info.xmin;
xyz_bounds[1] = bp->info.xmax;
xyz_bounds[2] = bp->info.ymin;
xyz_bounds[3] = bp->info.ymax;
xyz_bounds[4] = bp->info.zmin;
xyz_bounds[5] = bp->info.zmax;
n = bp->info.nvert;
verticies = NewDataset("Verticies", 1, &n, 3);
dataform = NewUnstructuredDataForm("BopDataForm",
0,
&n,
xyz_bounds,
verticies);
geometry = NewGeometryDataset("Bop");
scalars = NewDataset("Scalars", 1, &n, 0);
SetDatasetForm(geometry, dataform);
SetDatasetForm(scalars, dataform);
SetCurField(FORMFIELD, verticies);
SetCurField(FIELD1, scalars);
polys_left = bp->info.npoly;
while(polys_left > 0){
n_polys = MIN(polys_left, POLYS_PER_BITE);
orig_bpoly = bpoly = bop_read(bp, n_polys);
for(i=0 ; i < n_polys ; i++){
for(j=0 ; j < bpoly->nvert; j++){
bvert = &bpoly->vert[j];
PutFieldComponent(FORMFIELD, 0, &index, bvert->x);
PutFieldComponent(FORMFIELD, 1, &index, bvert->y);
PutFieldComponent(FORMFIELD, 2, &index, bvert->z);
PutFieldComponent(FIELD1, 0, &index, bvert->data);
poly_vert_index[j] = index;
index++;
}
AppendPolygonToDataset(geometry,
bpoly->nvert,
poly_vert_index);
bpoly = BOP_NEXT_POLY(&bp->info, bpoly);
}
cfree(orig_bpoly);
fprintf(stderr, "%d Polygons Defined %3.2f%% done\r",
total_polys,
100.0 * total_polys / bp->info.npoly);
total_polys += n_polys;
polys_left -= n_polys;
}
bop_close(bp);
fprintf(stderr, "%d Polygons Defined 100.00%% done\n", total_polys);
RegisterNewDataset(geometry);
RegisterNewDataset(scalars);
return NULLOBJ;
}
void InitJerryFiles()
{
DefineFormat("BOP", "bop", ReadBopFile, 0);
}
void KillJerryFiles()
{
}
#endif